package template;

/**
 * @author ycc
 * @date 2024/4/2
 * 模板方法模式是一种行为设计模式，它定义了一个操作中的算法骨架，将一些步骤延迟到子类中。
 * 模板方法使得子类可以在不改变算法结构的情况下重新定义算法的某些特定步骤
 */
public abstract class Coffee {
    public final void prepareRecipe() {
        boilWater();
        brew();
        pourInCup();
        if (wantsCondiments()) {
            addCondiments();
        }
    }

    protected abstract void brew();

    protected abstract void addCondiments();

    protected boolean wantsCondiments() {
        return true;
    }

    private void boilWater() {
        System.out.println("Boiling water");
    }

    private void pourInCup() {
        System.out.println("Pouring into cup");
    }
}
